package cn.zqy.demo.day09;


/**
 * 继承中【变量重名】导致的冲突。
 * 如果成员变量重名时，可以有两种访问方式：
 * 1.直接通过子类对象访问成员变量。
 *      等号左边是谁，优先谁的变量，没有则向上找。
 * 2.间接通过成员方法访问成员变量。
 *      该方法定义在哪，就优先用哪的变量，没有则向上找。
 *
 * */
public class Demo02ExtendsField {
    public static void main(String[] args) {
        Fu fu = new Fu(); // 创建父类对象
        System.out.println(fu.numFu); // 父只能用父中的
        System.out.println("================");

        Zi zi = new Zi();
        System.out.println(zi.numZi); //99
        System.out.println(zi.numFu); //10
        System.out.println("================");

        // 等号左边是谁，优先谁
        System.out.println(zi.num);     //40 优先子类
        // System.out.println(zi.a);       // 父子类中都么有的，就报错
        System.out.println("==============");

        // 这个方法是子类的，优先用子类的变量，没有再向上找。此处子类有这个变量。直接用自己的
        zi.methodZi(); // 40
        // 这个方法是子类的，优先用子类的变量，没有再向上找。此处子类无这个变量。用父类的
        zi.methodZz();  // 10
        System.out.println("==============");

        // 这个方法是父类的，优先用父类的变量。父类不可能向下搜寻
        zi.methodFu();  // 20
        fu.methodFu();  // 20
    }
}
